package uml.behavioral.responsibility_chain.ext;

/**
 * 职责链--处理链：借助一个个的具体处理者构造处理链，最好配置终结处理者，使用时将请求提交到链上即可
 * on 2023/2/1 14:33
 */
public class HandlerChain {
    private Handler[] handlers;

    /**
     * @param handlers 特别注意：一个处理者数组有且仅有一个终结处理者，并且，终结处理者应位于数组末端
     */
    public HandlerChain(Handler[] handlers) {
        this.handlers = handlers;
        constructChain();
    }

    private void constructChain() {
        for (int i = 0; i < handlers.length - 1; i++) {
            handlers[i].setNextHandler(handlers[i + 1]);
        }
    }

    public Result handleRequest(Request request, Standard standard) {
        return handlers[0].handle(request, standard);
    }
}
